import os
import platform
# 也可以一行内引入，逗号分隔，但是 IDE 会有警告；

# os下有 path 子模块：os.path;


# print(os.name)  #   nt，表示Windows；posix 表示Linux、Unix。

'''
在windows下，安装uwsgi。
从网上下载好uwsgi后，cmd到该解压后的目录中，python setup.py install的时候，报错，说是os没有uname()这个方法。
定位到uwsgiconfig.py文件中，首先import platform后，将os.uname()都改为platform.uname()即可。
os.uname()是不支持windows系统的。platform模块是支持任何系统。
print(os.uname()) 现在已经属于 platform 模块了。
'''
# print(platform.uname())
# uname_result(system='Windows', node='USER-20181219JI', release='7', version='6.1.7601', machine='AMD64', processor='Intel64 Family 6 Model 58 Stepping 9, GenuineIntel')

# print(os.environ)
# environ({'ALLUSERSPROFILE': 'C:\\ProgramData', 'APPDATA': 'C:\\Users\\Administrator\\AppData\\Roaming', 'COMMONPROGRAMFILES': 'C:\\Program Files\\Common Files', 'COMMONPROGRAMFILES(X86)': 'C:\\Program Files (x86)\\Common Files', 'COMMONPROGRAMW6432': 'C:\\Program Files\\Common Files', 'COMPUTERNAME': 'USER-20181219JI', 'COMSPEC': 'C:\\Windows\\system32\\cmd.exe', 'FP_NO_HOST_CHECK': 'NO', 'GOPATH': 'H:\\study\\go\\gopath', 'GOROOT': 'D:\\software\\go\\go1.9.7', 'HOMEDRIVE': 'C:', 'HOMEPATH': '\\Users\\Administrator', 'LOCALAPPDATA': 'C:\\Users\\Administrator\\AppData\\Local', 'LOGONSERVER': '\\\\USER-20181219JI', 'NUMBER_OF_PROCESSORS': '4', 'NVM_HOME': 'D:\\software\\nvm-noinstall', 'NVM_SYMLINK': 'D:\\software\\nodelink', 'OS': 'Windows_NT', 'PATH': 'D:\\software\\go\\go1.9.7\\bin;D:\\ProgramFiles\\Python36\\Scripts\\;D:\\ProgramFiles\\Python36\\;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;D:\\ProgramFiles\\Git\\cmd;;D:\\ProgramFiles(x86)\\Microsoft VS Code\\bin;D:\\software\\nvm-noinstall;D:\\software\\nodelink;.;;;;D:\\ProgramFiles(x86)\\Microsoft VS Code\\bin', 'PATHEXT': '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW', 'PROCESSOR_ARCHITECTURE': 'AMD64', 'PROCESSOR_IDENTIFIER': 'Intel64 Family 6 Model 58 Stepping 9, GenuineIntel', 'PROCESSOR_LEVEL': '6', 'PROCESSOR_REVISION': '3a09', 'PROGRAMDATA': 'C:\\ProgramData', 'PROGRAMFILES': 'C:\\Program Files', 'PROGRAMFILES(X86)': 'C:\\Program Files (x86)', 'PROGRAMW6432': 'C:\\Program Files', 'PSMODULEPATH': 'C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules\\', 'PUBLIC': 'C:\\Users\\Public', 'PYCHARM_HOSTED': '1', 'PYCHARM_MATPLOTLIB_PORT': '50446', 'PYTHONIOENCODING': 'UTF-8', 'PYTHONPATH': 'D:\\ProgramFiles\\JetBrains\\PyCharm2018.2.1\\helpers\\pycharm_matplotlib_backend;H:\\study\\python', 'PYTHONUNBUFFERED': '1', 'SESSIONNAME': 'Console', 'SYSTEMDRIVE': 'C:', 'SYSTEMROOT': 'C:\\Windows', 'TEMP': 'C:\\Users\\ADMINI~1\\AppData\\Local\\Temp', 'TMP': 'C:\\Users\\ADMINI~1\\AppData\\Local\\Temp', 'USERDOMAIN': 'USER-20181219JI', 'USERNAME': 'Administrator', 'USERPROFILE': 'C:\\Users\\Administrator', 'WINDIR': 'C:\\Windows', 'WINDOWS_TRACING_FLAGS': '3', 'WINDOWS_TRACING_LOGFILE': 'C:\\BVTBin\\Tests\\installpackage\\csilogfile.log', '_DFX_INSTALL_UNSIGNED_DRIVER': '1'})
# print(os.environ.get("path"))
# print(os.environ.get("PATH"))
# 大小写均可；

# print(os.curdir)    #   竟然就是一个点"."；
# print(os.getcwd())  #   H:\study\python\file
# print(os.getcwdu()) #   报错：AttributeError: module 'os' has no attribute 'getcwdu'

# 获取指定目录下的文件名和目录名组成的列表，注意只一层，不会递归（也就是说指定目录的直接子目录和子文件的名称的列表）；
# print(os.listdir(os.curdir))

# os.mkdir("../demo")
# 已存在的不会创建，会报错：FileExistsError: [WinError 183] 当文件已存在时，无法创建该文件。: '../demo'

# os.rmdir("../demo")
# 创建和删除均成功；只能删除空目录；非空目录不能使用此方法删除。
# 删除不存在的目录，报错：FileNotFoundError: [WinError 2] 系统找不到指定的文件。: '../demo'

# 删除非空目录，还没有找到方法；

# os.remove()
# 删除文件使用这个方法；
# os.unlink() 这个和os.remove() 功能一致。

# print(os.stat("../basic"))
'''
os.stat_result(
st_mode=16895, 
st_ino=844424930670612, 
st_dev=485281, 
st_nlink=1, 
st_uid=0, 
st_gid=0, 
st_size=4096, 
st_atime=1547048115, 
st_mtime=1547048115, 
st_ctime=1543411736)
'''

# os.rename(src, dest)
# 可以给目录改名，文件应该也可以；

# os.system("notepad")
# os.system("shutdown -s -t 500")   #   windows 8分钟后关机。怎么计算的？
# os.system("shutdown -a")   #   windows 取消前面的关机计划。

# #######################################################

print(os.path.abspath(os.curdir))

dir1 = r"D:\a\b\c\d"
dir2 = r"\aa\bb\cc"
print(os.path.join(dir1, dir2))     #   D:\aa\bb\cc

dir1 = r"D:\a\b\c\d"
dir2 = r"aa\bb\cc"
print(os.path.join(dir1, dir2))     #   D:\a\b\c\d\aa\bb\cc

# dir1 = r"D:\a\b\c\d"
# dir2 = r"aa\bb\cc\"
# print(os.path.join(dir1, dir2))     #   报错了，因为dir2 虽然有 r 来修饰，但最后的那个 \ 还是具有转义功能。

dir1 = r"D:\a\b\c\d"
dir2 = "aa\\bb\\cc\\"
print(os.path.join(dir1, dir2))     #   D:\a\b\c\d\aa\bb\cc\

# dir1 = r"D:\a\b\c\d\"
# dir2 = r"aa\bb\cc"
# print(os.path.join(dir1, dir2))     #   报错了，因为dir1 虽然有 r 来修饰，但最后的那个 \ 还是具有转义功能。

dir1 = "D:\\a\\b\\c\\d\\"
dir2 = r"aa\bb\cc"
print(os.path.join(dir1, dir2))     #   D:\a\b\c\d\aa\bb\cc

dir1 = r"D:\a\\b\c\d\\"
dir2 = r"aa\bb\cc"
print(os.path.join(dir1, dir2))     #   D:\a\\b\c\d\\aa\bb\cc（d 后面有两个 \）

# 总之，第一个和第二个路径的结尾可以有 \，但必须是 \\ 不带 r，否则怎么写都是bug。
# 第二个路径开头不能有 \。
# 但是注意：两个路径之间的分隔符，一般来说都是按当前系统的。除非写死。

print(os.path.split(r"D:\a\b\d\box.txt"))   #   ('D:\\a\\b\\d', 'box.txt')
print(os.path.split(r"D:\a\b\d\e"))     #   ('D:\\a\\b\\d', 'e')

print(os.path.splitext(r"D:\a\b\d\box.txt"))   #   ('D:\\a\\b\\d\\box', '.txt')
print(os.path.splitext(r"D:\a\b\d\e"))     #   ('D:\\a\\b\\d\\e', '')

print(os.path.dirname(r"D:\a\b\d\box.txt")) #   D:\a\b\d;
print(os.path.dirname(r"D:\a\b\d\e"))   #   D:\a\b\d;

print(os.path.basename(r"D:\a\b\d\box.txt"))    #   box.txt;
print(os.path.basename(r"D:\a\b\d\e"))  #   e;

# print(os.path.isabs(path))
# print(os.path.isdir(path))
# print(os.path.isfile(path))
# print(os.path.ismount(path))
# print(os.path.islink(path))
# print(os.path.exists(path))

# os.path.getsize(filename="")
# 获取文件字节数。